1. Field of the Invention
The present invention relates generally to multiprocessor computer systems that distribute system boot-up tasks among the processors, and in particular, to a multiprocessor computer system in which the memory initialization task is assigned to one or more processors other than the bootstrap processor.
2. Description of Related Art
Due to the advent of power management technology and the more recent "instant-on" efforts, there are many ways in which a computer may exist in the "OFF" state. Examples include hard off (power is disconnected), soft off (power is supplied only to components which monitor activity external to the system), suspend mode (contents of memory are stored on disk and current state of computer is preserved while power consumption is reduced to a minimum level), and sleep mode (the clock signal is reduced or halted to some or all of the system components during periods of inactivity). The sleep and suspend modes may each be invoked at various levels, depending on the particular implementation of these modes, and recovery from these modes is implementation specific.
Turning a computer "ON" from the hard-off or soft-off states causes the computer to begin an initialization process (often referred to as "boot-up"). In the initialization process, a system reset signal is asserted and released. After the de-assertion of the reset signal, many of the system peripheral components initialize themselves, retrieve configuration information from dedicated electrically erasable programmable read-only memories (EEPROMs), and enter an initialized state. At the same time, the CPU resets itself and searches for instructions on how to prepare the system for operation. The initial instructions typically are included in the basic input/output system (BIOS) which is executable code stored in a nonvolatile memory such as a read-only memory (ROM). The BIOS is built-in software that contains low level code used to control the keyboard, display screen, disk drives, serial communications, and a number of miscellaneous functions. The BIOS also specifies a boot-up sequence for the CPU to execute to make the computer ready for operation. The CPU normally begins executing initialization routines from the BIOS ROM, but subsequently copies the BIOS code to main memory from which the BIOS code may thereafter be executed during normal computer operations.
Typically, the first thing that the BIOS instructs the CPU to do is to perform what is called the Power-On Self-Test, or POST for short. The POST is a built-in diagnostic program that checks much of the computer's hardware to ensure that everything is present and functioning properly, before the BIOS begins the actual initialization process. Some additional tests are performed later in the boot process. If any fatal errors are encountered, the boot process stops. After the initial POST, the BIOS instructs the CPU to locate the video system's built in BIOS program and to execute it to initialize the video card. The CPU then displays the BIOS's startup screen, and looks for other devices to see if any of them have initialization routines. If any other device initialization routines (e.g. IDE hard drive) are found, they are executed as well.
The CPU then does more tests on the system, including the memory count-up test which may be viewed on the video display. In one form, the memory test may be performed by writing a test pattern to every memory location and subsequently reading every memory location to verify that the test pattern was correctly stored. A second test pattern may also be employed so that each bit gets tested in both states. Finally, some operating systems require that the memory be zeroed out prior to loading and executing the operating system software. Consequently, for each memory location there may be up to five access operations during the memory test (write pattern #1, read pattern #1, write pattern #2, read pattern #2, write zeros). For a computer with one megabyte of no-wait-state memory and a 12 MHz bus, the memory test requires less than half a second.
If an error is encountered after the initialization of the video system, a text error message will generally be displayed on the video display. As the initialization process continues, progress is regularly reported on the screen. The BIOS boot-up sequence also includes a "system inventory" of sorts, performing more tests to determine what sort of hardware is in the system. Modern BIOSes have many automatic settings and may, among other things, automatically determine memory timing based on what kind of memory it finds. Many BIOSes can also dynamically set hard drive parameters and access modes, and will determine these at roughly this time. The BIOS will also now instruct the CPU to search for and label logical devices (COM and LPT ports). If the BIOS supports the Plug and Play standard, the CPU will detect and configure Plug and Play devices at this time and display a message on the screen for each one it finds. The CPU will often display a summary screen about the system configuration and begin a search for a boot device. Some modern BIOSes contain a boot table that specifies the order of devices which the system should try to boot from. If a first target device is present and properly configured for booting, the system will boot from this device. If the target device that the system tries is not found, the CPU will then try the next device in the boot table, and continue until it finds a bootable device. If no boot device at all can be found, the system will normally display an error message and then freeze up the system.
Having identified a target boot drive, the BIOS instructs the CPU to look for boot information to start the operating system boot process. For example, with a hard disk, the CPU may search for a master boot record at cylinder 0, head 0, sector 1 (the first sector on the disk). If the CPU finds the master boot record, the CPU starts the process of loading and executing the operating system, using the information in the boot sector. At this point, the code indicated by the boot sector takes over from the BIOS.
The boot devices which are accessed during the above boot-up sequence may include any nonvolatile storage device. Floppy disks, hard disks, magnetic tape, CD-ROMs, Flash ROMs, and network server disks are all examples of devices which can serve as a boot device. In order for a device to be a boot device, it must hold a copy of an operating system, and typically it needs to include a "boot-sector" that informs the CPU of the operating system's exact storage location. Typically, local devices (i.e. devices included in the computer or directly connected to the computer) are preferred over remote devices (i.e. devices that need to be accessed via a network or shared communications link) for booting the system. A local device is nearly always able to provide much quicker response when operating system components need to be retrieved.
With the increasing sophistication of computers, a substantial increase in the time required for booting-up a computer has occurred. One particular instance is the memory test. Many computer workstations are being provided with 1-4 gigabytes of memory. Even with no-wait-state memory and 100 MHz bus speed, a conventional memory test may easily require over 60 seconds. When this is added on to the time required for other initialization tasks, the boot-up time may begin to annoy regular users.
Many variations exist for the boot-up sequence conducted by the BIOS. In particular, efforts are being made to reduce the time required for a computer to boot up. Since computer hardware has become extremely reliable, a proposal has been made to eliminate POST tests from the normal boot-up sequence. In "Simple Boot Flag Specification: Version 1.0", Microsoft has proposed the use of a register to communicate boot options to the system BIOS. The boot flags are PNPOS, BOOTING, and DIAG. The PNPOS flag is asserted if the operating system normally used by the computer is Plug-and-Play capable. If this is the case, the BIOS doesn't need to spend time configuring components that the operating system will configure. The DIAG flag is de-asserted if hardware tests are considered unnecessary. In this case, the BIOS can skip the POST. The BOOTING flag, if asserted, indicates that the previous boot attempt did not successfully complete and the BIOS may choose to ignore the other flags and provide a complete system test and configuration sequence.
In many systems, particularly those performing critical roles, it is desirable to reduce boot-up time without sacrificing the assurance provided by performing the POST on a regular basis. Thus, a computer system is needed that reduces the initialization time required by conventional system implementations.